perm filename LEVEL2.SAI[4,ALS]2 blob
sn#058562 filedate 1973-08-16 generic text, type T, neo UTF8
00010 BEGIN "LEVEL2"
00020 DEFINE ⊂="COMMENT"; ⊂ 8/16/73 FIRST DRAFT;
00030 PROCEDURE LEVEL2;
00040 BEGIN "LEV"
00050 ⊂ This procedure accumulates statistics on adjacency probabilities
00060 for segment types during the training stage and uses these apriori
00070 values to modify the individual estimates during use;
00075 ⊂ Probabilities are expressed in parts per 512;
00080
00090 EXTERNAL STRING NU;
00100 EXTERNAL INTEGER N,CFLAG,SEGC,FLAG;
00110 DEFINE TABNUM="16";
00120 EXTERNAL INTEGER ARRAY NAMES,CMAX,OUT1,OUT2,OUT3,OUT4[0:TABNUM];
00130 EXTERNAL INTEGER ARRAY HINTS[0:31];
00140 INTEGER I,J,K,L,M,Q;
00150 INTEGER BSTCNT,BSTHNT;
00160 INTEGER ARRAY HINT2,DUR2,SEGC2,TMP,CNT[0:31];
00170 INTEGER ARRAY CMAX2[0:16,0:31];
00180 INTEGER ARRAY BESTN,BESTP[0:7,0:31]; ⊂ Names and prob.values for the
00190 n best choices, kept ordered by sort after the initial merge;
00200 INTEGER ARRAY CONTEX[0:63,0:63]; ⊂ Sums accumulated in right half
00210 and adjacency conditional probabilities in 2 fields in left half;
00220 INTEGER ARRAY PROB[0:63]; ⊂ The a priori probabilities of features;
00230
00240
00250 PROCEDURE MERGE;
00260 BEGIN "MERGE" ⊂ used to keep values ordered as they are accumulated;
00270 INTEGER K;
00280
00290 BESTP[7,N]←J; BESTN[7,N]←L;
00300 FOR K←7 STEP -1 UNTIL 1 DO IF BESTP[K,N]> BESTP[K-1,N] THEN BEGIN
00310 L←BESTN[K-1,N]; BESTN[K-1,N]←BESTN[K,N]; BESTN[K,N]←L;
00320 J←BESTP[K-1,N]; BESTP[K-1,N]←BESTP[K,N]; BESTP[K,N]←J; END
00330 ELSE DONE;
00340 END "MERGE";
00350
00360
00370 PROCEDURE SORT;
00380 BEGIN "SORT" ⊂ used to reorder values after adjacency corrections;
00390 INTEGER I,J,K;
00400
00410 FOR I←0 STEP 1 UNTIL 6 DO
00420 FOR J←I+1 STEP 1 UNTIL 7 DO IF BESTP[I,N]< BESTP[J,N] THEN BEGIN
00430 K←BESTN[I,N]; BESTN[I,N]←BESTN[J,N]; BESTN[J,N]←K;
00440 K←BESTP[I,N]; BESTP[I,N]←BESTP[J,N]; BESTP[J,N]←K; END;
00450 END "SORT";
00460
00470
00480 PROCEDURE SETUP;
00490 BEGIN "SETUP" ⊂ computes direct and adjacency probabilities;
00500 INTEGER I,J,K,ISUM,JSUM,SUM;
00510
00520 SUM←0;
00530 FOR I←0 STEP 1 UNTIL 63 DO SUM←SUM+PROB[I] LAND '777777;
00540 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
00550 J←PROB[I] LAND '777777; K←J*512%SUM; IF K>511 THEN K←511;
00555 PROB[I]←J+(K LSH 27); END;
00557
00570 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
00580 JSUM←0;
00590 FOR J←0 STEP 1 UNTIL 63 DO JSUM←JSUM+CONTEX[I,J] LAND '777777;
00600 FOR J←0 STEP 1 UNTIL 63 DO BEGIN
00610 K←((CONTEX[I,J] LAND '777777)*512)%JSUM;
00615 IF K>511 THEN K←511;
00620 CONTEX[I,J]←(CONTEX[I,J] LAND '777777777)+(K LSH 27);
00630 END;
00640 END;
00650
00660 FOR J←0 STEP 1 UNTIL 63 DO BEGIN
00670 ISUM←0;
00680 FOR I←0 STEP 1 UNTIL 63 DO ISUM←CONTEX[I,J] LAND '777777;
00690 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
00700 K←((CONTEX[I,J] LAND '777777)*512)%ISUM;
00705 IF K>511 THEN K←511;
00710 CONTEX[I,J]←( CONTEX[I,J] LAND '777000777777)+(K LAND 18);
00720 END;
00730 END;
00740 END "SETUP";
00750
00760
00770 IF CFLAG≠0 THEN BEGIN "CFLAG" ⊂ to proceess another segment;
00780 FOR J←0 STEP 1 UNTIL 7 DO BESTP[J,N]←0;
00790 SEGC2[N]←SEGC; DUR2[N]←SEGC2[N]-SEGC2[N-1];
00800 FOR I←0 STEP 1 UNTIL TABNUM-1 DO BEGIN
00810 IF NAMES[I]=0 THEN DONE;
00820 FOR J←0 STEP 1 UNTIL 7 DO BEGIN
00830 IF (J←LDB(POINT(9,CMAX[I],8)))>BESTP[7,N] THEN BEGIN
00840 L←OUT1[I]; MERGE; END;
00850
00860 IF (J←LDB(POINT(9,CMAX[I],17)))>BESTP[7,N] THEN BEGIN
00870 L←OUT2[I]; MERGE; END;
00880 IF (J←LDB(POINT(9,CMAX[I],26)))>BESTP[7,N] THEN BEGIN
00890 L←OUT3[I]; MERGE; END;
00900 IF (J←LDB(POINT(9,CMAX[I],35)))>BESTP[7,N] THEN BEGIN
00910 L←OUT4[I]; MERGE; END;
00920 END;
00930 END;
00940
00950 IF FLAG=-1 THEN BEGIN "FLAG-1"
00960 L←0; TMP[L]←HINTS[DUR2[N]];
00970 FOR J← DUR2[N] STEP -1 UNTIL 0 DO
00980 IF HINTS[J]=TMP[L] THEN CNT[L]←CNT[L]+1 ELSE BEGIN
00990 L←L+1; CNT[L]←1; TMP[L]←HINTS[J]; END;
01000 BSTHNT←BSTCNT←0;
01010 FOR J←L STEP -1 UNTIL 0 DO
01020 IF CNT[J]>BSTCNT THEN BEGIN BSTCNT←CNT[J]; BSTHNT←TMP[J]; END;
01030 HINT2[N]←BSTHNT;
01040 J←HINTS[N-1]; K←BSTHNT; PROB[K]←PROB[K]+1;
01050 CONTEX[J,K]←CONTEX[J,K]+1;
01060 END "FLAG-1";
01070
01080 IF FLAG=1 THEN IF N>1 THEN BEGIN "FLAG1" ⊂ correct for context;
01090
01100 FOR I←0 STEP 1 UNTIL 7 DO BEGIN
01110 K←BESTN[I,N-1];
01120 Q←LDB(POINT(9,PROB[K],8));
01130 FOR J←0 STEP 1 UNTIL 7 DO BEGIN ⊂ backward adjustment;
01140 L←BESTN[J,N];
01150 M←LDB(POINT(9,CONTEX[K,L],8));
01160 BESTP[I,N-1]← BESTP[I,N-1]+
01170 ((1-BESTP[I,N-1])*(((M*BESTP[J,N]) LSH -9)-Q) LSH -9);
01180 END; END; SORT;
01190
01200 FOR J←0 STEP 1 UNTIL 7 DO BEGIN
01210 L←BESTN[J,N];
01220 Q←LDB(POINT(9,PROB[L],17));
01230 FOR I←0 STEP 1 UNTIL 7 DO BEGIN ⊂ forward adjustment;
01240 K←BESTN[I,N-1];
01250 M←LDB(POINT(9,CONTEX[K,L],17));
01260 BESTP[J,N]←BESTP[J,N]+
01270 ((1-BESTP[J,N])*(((M*BESTP[I,N-1]) LSH -9)-Q) LSH -9);
01280 END; END; SORT;
01290
01300 END "FLAG1";
01310 N←N+1;
01320 END "CFLAG";
01330
01340
01350
01360 END "LEV";
01370 END "LEVEL2";
01380
01390 ⊂ ************I;
01400 ⊂ PUT IN SAY ;
01410 ⊂ AT 401/2;
01420 ⊂ HINTS[HCNT]←J;
01430 ⊂ HCNT←HCNT+1;